package com.ch.engine.daily.abstractTest;

/**
 * 支付工厂 - 工厂模式示例
 * 展示设计模式在抽象类和接口中的应用
 *
 * @author wangchunhui
 * @date 2025/1/25
 */
public class PaymentFactory {
    
    public enum PaymentType {
        ALIPAY, WECHAT, CREDIT_CARD
    }
    
    // 创建支付处理器（返回接口类型，体现多态）
    public static PaymentInterface createPayment(PaymentType type, String... params) {
        switch (type) {
            case ALIPAY:
                return new AliPay();
            case WECHAT:
                return new WeChatPay();
            case CREDIT_CARD:
                if (params.length < 2) {
                    throw new IllegalArgumentException("信用卡支付需要卡号和银行名称");
                }
                return new CreditCardPay(params[0], params[1]);
            default:
                throw new IllegalArgumentException("不支持的支付类型：" + type);
        }
    }
    
    // 创建抽象支付处理器（返回抽象类类型）
    public static AbstractPaymentProcessor createAbstractPayment(PaymentType type) {
        switch (type) {
            case ALIPAY:
                return new AliPay();
            case WECHAT:
                return new WeChatPay();
            default:
                throw new IllegalArgumentException("该支付类型不支持抽象处理器：" + type);
        }
    }
}